package cn.sjlink.util;

import cn.sjlink.config.LoginException;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import java.security.MessageDigest;


/**
 * Created by xinchao on 2017/3/3 0003.
 */
@Component
public class TokenUtil {

    private static final String YAN = "testMRf1$789787aadfjkds//*-+'[]jfeu;384785*^*&%^%$%";// 加盐

    /**
     * 生成tokenSession并将其保存缓存
     * 缓存key = empid
     * 缓存value = TokenBean
     */
    public static String getToken(Long id){
        return MD5(System.currentTimeMillis()+YAN+id);
    }

    public static void checkToken(String token,String tokenRedis) throws LoginException {
        if(tokenRedis==null){
            throw new LoginException("您还没有登录,请登录后操作");
        }
        if(token.isEmpty()){
            throw new LoginException("您还没有登录,请登录后操作");
        }
        if(StringUtils.isEmpty(tokenRedis)){
            throw new LoginException("您还没有登录,请登录后操作");
        }
        if(!token.equals(tokenRedis)){
            throw new LoginException("您还没有登录,请登录后操作");
        }
    }

    /**
     * @param @param  s
     * @param @return 参数
     * @return String 返回类型
     * @Title: MD5
     * @Description: 加密
     */
    public final static String MD5(String s) {
        try {
            byte[] btInput = s.getBytes();
            // 获得MD5摘要算法的 MessageDigest 对象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字节更新摘要
            mdInst.update(btInput);
            // 获得密文
            return byte2hex(mdInst.digest());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 将字节数组转换成16进制字符串
     *
     * @param b
     * @return
     */
    private static String byte2hex(byte[] b) {
        StringBuilder sbDes = new StringBuilder();
        String tmp = null;
        for (int i = 0; i < b.length; i++) {
            tmp = (Integer.toHexString(b[i] & 0xFF));
            if (tmp.length() == 1) {
                sbDes.append("0");
            }
            sbDes.append(tmp);
        }
        return sbDes.toString();
    }


}
